# 一般而言，我们使用整除运算//和求余运算%来计算两个整数相除的商和余数。
div = 10 // 4
mod = 10 % 4
# 如果想要同时得到商和余数，可以直接使用内置函数divmod()来完成。
div, mod = divmod(10, 4)

# 取整操作分为向上取整和向下取整两种，这两个操作可以用Python中的math内置库的ceil()函数和floor()函数来实现。
# ceil和floor的意思分别是天花板和地板，非常形象。
from math import ceil, floor

print(ceil(1.5))    # 得到2
print(ceil(-1.5))   # 得到-1

print(floor(1.5))   # 得到1
print(floor(-1.5))  # 得到-2

# 直接使用int()，也可以完成取整。对于正整数而言，int()是向下取整，对于负整数而言，int()是向上取整。即int()操作是一种向零截断的取整操作，
# 或者说int()操作是对一个浮点数取其整数部分。
print(int(1.5))    # 得到1
print(int(-1.5))   # 得到-1

# 某些题目在对变量进行初始化的时候，需要将其初始化为无穷大或者负无穷大，
# 这可以用Python中的math内置库的inf直接得到。
from math import inf

ans = inf
res = -inf

# 内置函数bin()、oct()、hex()能够非常方便地将一个整数num转化为
# 其对应的二进制、八进制、十六进制字符串。
num = 20

# 20的二进制数是10100
# 输出0b10100，包含前缀"0b"
print(bin(num))
# 输出10100，用切片去除了前缀"0b"
print(bin(num)[2:])

# 20的八进制数是24
# 输出0o24，包含前缀"0o"
print(oct(num))
# 输出24，用切片去除了前缀"0o"
print(oct(num)[2:])

# 20的十六进制数是14
# 输出0x14，包含前缀"0x"
print(hex(num))
# 输出14，用切片去除了前缀"0x"
print(hex(num)[2:])

#实际上，int()函数可以传入参数base，表示需要转换的原字符串num_str是用哪种进制来表示的。
num_str = "100"

# 得到从二进制数num_str转化的十进制数num_from_base2 = 4
num_from_base2 = int(num_str, base = 2)

# 得到从八进制数num_str转化而来的十进制数num_from_base8 = 64
num_from_base8 = int(num_str, base = 8)

# 得到从十六进制数num_str转化而来的十进制数num_from_base16 = 256
num_from_base16 = int(num_str, base = 16)

# 得到从七进制数num_str转化而来的十进制数num_from_base7 = 49
num_from_base7 = int(num_str, base = 7)